using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;

namespace RC.ControlAcceso.BaseDatos
{
    public class CACategoriaBD : TablaBase
    {
        #region Variables
        private int mIdCategoria;
        private string mNombre;
        private bool _estaActivo;

        string SPObtenerTodos = "";
        #endregion

        #region Propiedades
        public int IdCategoria
        {
            get { return mIdCategoria; }
            set { mIdCategoria = value; }
        }

        public string Nombre
        {
            get { return mNombre; }
            set { mNombre = value; }
        }
        public bool EstaActivo
        {
            get { return _estaActivo; }
            set { _estaActivo = value; }
        }
        #endregion

        #region Constructores
        public CACategoriaBD()
        {
            ValoresIniciales();
        }
        private void ValoresIniciales()
        {
            mIdCategoria = -1;
            Nombre = "";
            EstaActivo = true;
        }
        public CACategoriaBD(int pIdCategoria)
        {
            ValoresIniciales();
            mIdCategoria = pIdCategoria;
            Editar();
        }
        protected override void AsignarSP()
        {
            SPActualizar = "CACategoriaActualizar";
            SPEditar = "CACategoriaEditar";
            SPInsertar = "CACategoriaInsertar";
            SPRecuperar = "CACategoriaRecuperar";
            SPSeleccionar = "CACategoriaSeleccionar";
            SPObtenerTodos = "CACategoriaObtenerTodos";
        }
        protected override System.Data.SqlClient.SqlParameter[] AsignaParametros(string pNombreSP)
        {
            try
            {
                SqlParameter[] Param;
                SqlParameter Parametro;
                switch (pNombreSP)
                {
                    case "CACategoriaEditar":

                        Param = new SqlParameter[1];

                        Parametro = new SqlParameter();
                        Parametro.ParameterName = "@IdCategoria";
                        Parametro.SqlDbType = SqlDbType.Int;
                        Parametro.Direction = ParameterDirection.Input;
                        Parametro.Value = mIdCategoria;
                        Param[0] = Parametro;

                        return Param;

                    case "CACategoriaRecuperar":

                        Param = new SqlParameter[1];

                        Parametro = new SqlParameter();
                        Parametro.ParameterName = "@IdCategoria";
                        Parametro.SqlDbType = SqlDbType.Int;
                        Parametro.Direction = ParameterDirection.Input;
                        Parametro.Value = mIdCategoria;
                        Param[0] = Parametro;

                        return Param;

                    case "CACategoriaInsertar":
                    case "CACategoriaActualizar":

                        Param = new SqlParameter[3];

                        Parametro = new SqlParameter();
                        Parametro.ParameterName = "@IdCategoria";
                        Parametro.SqlDbType = SqlDbType.Int;
                        Parametro.Direction = ParameterDirection.Input;
                        Parametro.Value = mIdCategoria;
                        Param[0] = Parametro;

                        Parametro = new SqlParameter();
                        Parametro.ParameterName = "@Nombre";
                        Parametro.SqlDbType = SqlDbType.VarChar;
                        Parametro.Direction = ParameterDirection.Input;
                        Parametro.Value = mNombre;
                        Param[1] = Parametro;

                        Parametro = new SqlParameter();
                        Parametro.ParameterName = "@EstaActivo";
                        Parametro.SqlDbType = SqlDbType.Bit;
                        Parametro.Direction = ParameterDirection.Input;
                        Parametro.Value = EstaActivo;
                        Param[2] = Parametro;

                        return Param;

                    default:
                        return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected override void AsignarDatos(System.Data.SqlClient.SqlDataReader pDatos)
        {
            if (pDatos.GetValue(pDatos.GetOrdinal("IdCategoria")) != DBNull.Value)
                mIdCategoria = pDatos.GetInt32(pDatos.GetOrdinal("IdCategoria"));
            if (pDatos.GetValue(pDatos.GetOrdinal("Nombre")) != DBNull.Value)
                mNombre = pDatos.GetString(pDatos.GetOrdinal("Nombre")).Trim();
            if (pDatos.GetValue(pDatos.GetOrdinal("EstaActivo")) != DBNull.Value)
                EstaActivo = pDatos.GetBoolean(pDatos.GetOrdinal("EstaActivo"));
        }
        public DataSet ObtenerTodos()
        {
            try
            {
                Conectar();
                AsignarSP();
                Parametros = AsignaParametros(SPObtenerTodos);
                DataSet ds = SqlHelper.ExecuteDataset(miConn, CommandType.StoredProcedure, SPObtenerTodos, Parametros);
                return ds;
            }
            catch (Exception ex)
            {
                if (miTrans != null)
                    miTrans.Rollback();
                throw new Exception("Error al recuperar de la base de datos. " + ex.Message);
            }
            finally
            {
                if (miConn != null && miConn.State == ConnectionState.Open)
                    miConn.Close();
                miConn.Dispose();
            }
        }
        #endregion
    }
}
